package com.hy.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hy.common.Result;
import com.hy.entity.SysPoint;
import com.hy.entity.PointsSettings;
import com.hy.service.SysPointsService;
import com.hy.service.SysPointsSettingsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 积分管理控制器，统一处理积分相关操作，包括积分设置的获取、更新，以及用户积分列表查询和积分调整等功能。
 */
@RestController
@RequestMapping("/admin/points")
public class SysPointsSettingsController {
    @Autowired
    private SysPointsService pointsService;
    @Autowired
    private SysPointsSettingsService pointsSettingsService;

    /**
     * 分页获取用户积分列表
     * @param pageNum 页码，默认值为1，用于指定查询的页面
     * @param pageSize 每页数量，默认值为10，用于指定每页显示的记录数
     * @return 封装了用户积分列表分页数据的Result对象
     */
    @GetMapping("/list")
    public Result<IPage<SysPoint>> getUserPointsList(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize) {
        return Result.success((IPage<SysPoint>) pointsService.getUserPointsList(pageNum, pageSize));
    }

    /**
     * 手动调整用户积分
     * @param userId 用户ID，用于定位需要调整积分的用户
     * @param adjustment 积分调整量，正数增加积分，负数减少积分
     * @return 操作成功提示的Result对象
     */
    @PostMapping("/adjust")
    public Result<?> adjustUserPoints(@RequestParam Long userId, @RequestParam Long adjustment) {
        pointsService.adjustUserPoints(userId, adjustment);
        return Result.success("调整成功");
    }

    /**
     * 获取所有积分设置
     * @return 封装了积分设置列表数据的Result对象
     */
    @GetMapping("/settings")
    public Result<List<PointsSettings>> getSettings() {
        return Result.success((List<PointsSettings>) pointsSettingsService.getSettings());
    }

    /**
     * 更新积分设置
     * @param settings 包含新积分设置的列表，通过请求体传入
     * @return 操作成功提示的Result对象
     */
    @PostMapping("/settings")
    public Result<?> updateSettings(@RequestBody List<PointsSettings> settings) {
        pointsSettingsService.updateSettings(settings);
        return Result.success("更新成功");
    }
}